<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // js预编译
        //    先提升var,再提升具名函数
        //    在函数内部也存在预编译
        //    函数名与变量名重复 ， 覆盖
        //    函数优先使用自己的变量








        // 你看到的代码
        // console.log(a);
        // var a = 2 ;
        // a++ ;
        // console.log(a);
        // a = function() {
        //     var a = 4 ;
        //     console.log(a);
        //     a++ ;
        // }
        // console.log(a);
        // a();


        // js真正的执行顺序
        // 1 预编译  提升var   提升具名函数
        // var a ;
        // console.log(a);  // undefined
        // a = 2 ;
        // a++ ;
        // console.log(a);  // 3
        // a = function() {
        //     var a = 4 ;
        //     console.log(a);  // 4
        //     a++ ;
        // }
        // console.log(a);  // 打印函数
        // a();
        // console.log(a);




        // 你看到的代码
        // console.log(add);
        // add() ;
        // var add = 4 ;
        // var b = 3 ;
        // console.log(b);
        // function add(){
        //     console.log(b);
        //     var b = 5 ;
        //     b++ ; 
        //     console.log(b);
        // }
        // // add();
        // add++ ;
        // console.log(add);


        // js真正的执行顺序
        // 1 预编译
        var add ;
        var b ;
        function add() {
            // 函数内部也存在预编译
            var b ;
            console.log(b);
            b = 5 ;
            b++ ;
            console.log(b); // 局部变量b变成了6
        }
        add();
        console.log(b);
        add = 4 ;
        b = 3 ;
        add++ ;
        console.log(add);
        add()   // 报错
    </script>
    
</body>
</html>